package tp.pr5.mv;

import tp.pr5.mv.traps.MVTrap;

	//Clase Controlador de la que heredan los tres controladores de la aplicación, uno por cada modo.

public abstract class Controller {
	
	protected CPU cpu; // El controlador posee una vista del modelo (en este caso la CPU)
	

	public abstract void requestRun();
	
	public abstract void execute();
	
	
	public void requestPop() {            // Petición de POP en la pila.
		cpu.getOperandStack().pop();
	}

	
	public void requestPush(int val) {    // Petición de PUSH en la pila.
		cpu.getOperandStack().push(val);	
	}

	
	public void requestWrite(int pos, int val) {     // Petición de WRITE en la memoria.
		cpu.getMemory().write(pos, val);
	}

	public void requestStep() { // Petición de ejecutar el comando STEP
		
		try {
			cpu.step();
		} catch (MVTrap e) {
			
		}
		
	}

	
	public void requestStepN(int n) { // Petición de ejecutar el comando STEP N

		try {
			cpu.step(n);
		} catch (MVTrap e) {
			
		}
		
	}
	
	public void requestPause() {
		cpu.setAborted(true);
	}
	
}
